{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Control Systems <img src='data/images/logo.png' width=50 align='left'> \n",
    "\n",
    "author: Thomas Haslwanter\\\n",
    "date: June-2020"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Preliminaries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import the required packages\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import signal"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dynamics\n",
    "\n",
    "### Damped Oscillator\n",
    "\n",
    "A *damped oscillator* can be implemented by the following mechanical system:\n",
    "\n",
    "<img src=\"data/images/1D_movement.png\" style=\"width: 300px;\"/>\n",
    "\n",
    "* x ... position of mass in space\n",
    "* b ... position of base\n",
    "* k ... spring constant\n",
    "* $\\delta = b - x$ ... difference\n",
    "\n",
    "\\begin{equation}\n",
    "    m \\ddot{x} = r \\dot{\\delta} + k * \\delta\n",
    "\\end{equation}\n",
    "\\begin{equation}\n",
    "    m \\ddot{b} = m \\ddot{\\delta} + r \\dot{\\delta} + k * \\delta\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Laplace Transformation\n",
    "\n",
    "Differential equations like the one above can be converted into - easily solvable - algebraic equations, by making use of the *Laplace Transofmation*. Given any time course f(t), its Laplace transform F(s) is\n",
    "\n",
    "\\begin{equation}\n",
    "  F(s) = \\int\\limits_0^\\infty  {f(t) \\cdot {e^{ - st}}dt}\n",
    "\\end{equation}\n",
    "\t\n",
    "while its inverse is\n",
    "\n",
    "\\begin{equation}\n",
    "  f(t) = \\int\\limits_S {F(s) \\cdot {e^{st}}ds}\n",
    "\\end{equation}\n",
    "\n",
    "where the integration is over the s-plane, S. s is sometimes referred to as *complex frequency*.\n",
    "\n",
    "Laplace Transformations are a generalization of Fourier Transformation. With Fourier Transformations we have dealt only with sine waves, $e^{j \\omega t}$ . Put another way, we have restricted $s$ to $j \\omega$ so that est was restricted to $e^{j \\omega t}$. But this is unnecessary, we can let $s$ enjoy being fully complex or $s = \\sigma + j \\omega$ . This greatly expands the kinds of functions that $e^{st}$ can represent.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With a Laplace transformation, where\n",
    "\n",
    "\\begin{equation}\n",
    "    \\frac{dx}{dt} \\rightarrow s \\tilde{X} - x(0)\n",
    "\\end{equation}\n",
    "the differntial equation above is transformed into\n",
    "\n",
    "\\begin{equation}\n",
    "    \\frac{\\delta}{sB} = \\frac{m * s}{m s^2 + r s + k}\n",
    "\\end{equation}\n",
    "\n",
    "#### Example: Kick a Damped Oscillator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.lines.Line2D at 0x22b52b05648>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import the required modules\n",
    "from scipy import signal\n",
    "\n",
    "# Define the system\n",
    "m, r, k = 1, 1, 0.1\n",
    "num = [m, 0]\n",
    "den = [m, r, k]\n",
    "system = signal.lti(num, den)\n",
    "\n",
    "# Define the input\n",
    "t = np.arange(0, 30, 0.1)\n",
    "x = np.zeros_like(t)\n",
    "x[t>1] = 1\n",
    "\n",
    "# Simulate the system response\n",
    "tout, outSignal, xout = signal.lsim(system, x, t)\n",
    "\n",
    "# Plot the output\n",
    "plt.plot(t, x, label='Movement Base')\n",
    "plt.plot(tout, outSignal, label='Displacement')\n",
    "plt.legend()\n",
    "plt.xlabel('Time [sec]')\n",
    "plt.ylabel('Deflection')\n",
    "plt.ylim(-0.05, 1.05)\n",
    "plt.axhline(0, linestyle='--')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analysis\n",
    "\n",
    "### Position from acceleration\n",
    "\n",
    "* Select a *reference position*\n",
    "* Define a coordinate system (typically a *right-handed* coordinate systems)\n",
    "* Take the (discrete) velocity v(t)\n",
    "\n",
    "\\begin{equation}\n",
    "    \\vec{x}(t) = \\vec{x}(0) + \\sum_{i=1}^{n}{\\vec{v}(t_i) dt}\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Time [sec]')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# For example, calculate the position from a velocity step\n",
    "from scipy.integrate import cumtrapz\n",
    "\n",
    "# Set the experimenal parameters\n",
    "rate = 50     # sample rate, in [Hz]\n",
    "duration = 10  # [sec]\n",
    "vel_max = 100\n",
    "x0 = 0         # Initial potiion\n",
    "\n",
    "# Simulate the velocity step\n",
    "t = np.arange(duration*rate)/rate\n",
    "vel = np.zeros(duration*rate)\n",
    "vel[2*rate:]= vel_max  # deg/sec\n",
    "vel[rate:2*rate] = np.linspace(0, vel_max, rate)\n",
    "\n",
    "# Calculate the corresponding position in space\n",
    "pos = cumtrapz(vel, dx=1/rate, initial=x0)\n",
    "\n",
    "fig, axs = plt.subplots(2,1)\n",
    "axs[0].plot(t, vel)\n",
    "axs[0].set_ylabel('Velocity [m/s]')\n",
    "axs[1].plot(t, pos)\n",
    "axs[1].set_ylabel('Positoin [m]')\n",
    "axs[1].set_xlabel('Time [sec]')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[9_SoundProc_Windowing](9_SoundProc_Windowing.ipynb)<img src=\"data\\images\\Backward.png\" align='middle'>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
